using jiuyuan.数据.基础数据类;
using jiuyuan.数据.怪物类;
using jiuyuan.数据.玩家类;

namespace jiuyuan.服务;

// 行动单位信息
public class 行动单位
{
    public 战斗单位 单位 { get; set; } = null!;
    public int 速度 { get; set; }
    public bool 已行动 { get; set; } = false;
}

// 回合制战斗系统
public class 回合制战斗系统
{

    /// <summary>
    /// 根据速度属性计算行动顺序
    /// </summary>
    public List<行动单位> 计算行动顺序(List<玩家> 玩家队伍, List<怪物> 怪物队伍)
    {
        var 行动单位列表 = new List<行动单位>();

        // 添加玩家到行动列表
        foreach (var 玩家 in 玩家队伍)
        {
            行动单位列表.Add(new 行动单位
            {
                单位 = 玩家,
                速度 = 玩家.当前属性.速度
            });
        }

        // 添加怪物到行动列表
        foreach (var 怪物 in 怪物队伍)
        {
            行动单位列表.Add(new 行动单位
            {
                单位 = 怪物,
                速度 = 怪物.当前属性.速度
            });
        }

        // 按速度降序排序
        return 行动单位列表.OrderByDescending(u => u.速度).ToList();
    }

    /// <summary>
    /// 获取下一个行动单位
    /// </summary>
    public 行动单位? 获取下一个行动单位(List<行动单位> 行动顺序)
    {
        return 行动顺序.FirstOrDefault(u => !u.已行动);
    }

    /// <summary>
    /// 标记单位已完成行动
    /// </summary>
    public void 标记单位已行动(行动单位 单位)
    {
        单位.已行动 = true;
    }

    /// <summary>
    /// 重置回合行动状态
    /// </summary>
    public void 重置回合行动状态(List<行动单位> 行动顺序)
    {
        foreach (var 单位 in 行动顺序)
        {
            单位.已行动 = false;
        }
    }
}